#ifndef MATH_OWVECTOR
#define MATH_OWVECTOR



namespace Math
{



template <typename T, typename K = T>
class OWVector
  {
      public:
          ~OWVector() {}
          OWVector()  {}

          static T            VcdotV(const Vector<T,K>& vec_1, const Vector<T,K>& vec_2); // (V,V)
          static Vector<T,K>  VxV(const Vector<T,K>& vec_1, const Vector<T,K>& vec_2);    // vector product
          
          static T            VcdotV(const Vector<T,K>* const vec_1, const Vector<T,K>* const vec_2); // (V,V)
          static Vector<T,K>* VxV(const Vector<T,K>* const vec_1, const Vector<T,K>* const vec_2);    // vector product

          static T            VcdotV(const Vector<T,K>& vec_1, const T* const vec_2);       
          static Vector<T,K>  VxV(const Vector<T,K>& vec_1, const T* const vec_2);
          static Vector<T,K>  VxV(const T* const vec_1, const Vector<T,K>& vec_2);

          static T            VcdotV(const Vector<T,K>* const vec_1, const T* const vec_2);
          static Vector<T,K>* VxV(const Vector<T,K>* const vec_1, const T* const vec_2);
          static Vector<T,K>* VxV(const T* const vec_1, const Vector<T,K>* const vec_2);

          static Vector<T,K>  LinearCombination(Vector<T,K>** vec_array, const Vector<T,K>& coordinates);
          static Vector<T,K>* LinearCombination(Vector<T,K>** vec_array, const Vector<T,K>* const coordinates);
  }; // end class OWVector
} // end namespace Math



#include "source/OWVector.cpp"


#endif
